package com.zw.pm.module.board.single;

import com.zw.pm.gen.entity.Project;
import com.zw.pm.gen.entity.Task;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

/**
 * @Description: 任务 数据访问层
 *
 * @Author: China.sgl
 * @Date: 2019/9/16 09:11
 */
public interface TaskDao {

    /**
     * 根据项目ID查询 模板任务
     *
     * @param id 项目id
     * @param taskTempId 模板任务ID
     * @return list
     */
    TaskModel findTaskByProjectIdAndTaskTempId(@Param("id") Integer id, @Param("taskTempId") Integer taskTempId);

    /**
     * 根据项目ID查询 生产厂任务
     *
     * @param id 项目id
     * @return list
     */
    List<TaskModel> findFactoryTaskByProjectId(Integer id);

    /**
     * 根据ID查询
     *
     * @param id id
     * @return TaskModel
     */
    TaskModel getById(Integer id);

    /**
     * 根据项目ID查询工艺任务平均状态
     *
     * @param projectId 项目ID
     * @return 平均值
     */
    float findProcessStatusByProjectId(Integer projectId);

    /**
     * 根据项目ID查询生产任务平均状态
     *
     * @param projectId 项目ID
     * @return 平均值
     */
    float findProduceStatusByProjectId(Integer projectId);

    /**
     * 根据项目ID查询所有任务平均状态
     *
     * @param projectId 项目ID
     * @return 平均值
     */
    float findAllStatusByProjectId(Integer projectId);

    /**
     * 修改其它生产厂任务总数量
     *
     * @param t 任务
     */
    void updateOtherProduceTaskNumByProject(Task t);

    /**
     * 修改其它生产厂任务总重量
     *
     * @param t 任务
     */
    void updateOtherProduceTaskWeightByProject(Task t);

    /**
     * 修改五厂任务总数量
     *
     * @param t 任务
     */
    void updateFiveProduceTaskNumByProject(Task t);

    /**
     * 修改五厂任务总数量
     *
     * @param t 任务
     */
    void updateFiveProduceTaskWeightByProject(Task t);

    /**
     * 修改任务
     *
     * @param task 任务
     * @return 行数
     */
    int updateById(Task task);

    /**
     * 根据项目ID和生产厂ID查询任务ID
     *
     * @param projectId projectId
     * @param factoryId factoryId
     * @return id
     */
    Integer findTaskIdByProjectIdAndFactoryId(@Param("projectId") Integer projectId, @Param("factoryId") Integer factoryId);

    /**
     * 删除任务日报数据
     *
     * @param taskId taskId
     */
    void deleteDailyByTaskId(Integer taskId);

    /**
     * 根据项目ID和模板ID查询项目任务
     *
     * @param projectId 项目ID
     * @param taskTempId 任务模板ID
     * @return task
     */
    Task findTaskByProjectIdAndTempId(@Param("projectId") Integer projectId, @Param("taskTempId") Integer taskTempId);

    /**
     * 根据项目ID和任务模板ID删除任务
     *
     * @param id 项目ID
     * @param taskTempId 任务模板ID
     */
    void deleteTaskByProjectIdAndTaskTempId(@Param("projectId") Integer id, @Param("taskTempId") Integer taskTempId);


    /**
     * 修改生产厂任务总数量
     */
    void updateProduceTaskNumByProject(Project project);

    /**
     * 修改生产厂任务总重量
     */
    void updateProduceTaskWeightByProject(Project project);

    /**
     * 修改日报表重量
     */
    void updateTaskDailyWeightByProject(Project project);

    /**
     * 根据项目ID查询所有任务
     *
     * @param id 项目ID
     * @return list
     */
    List<Task> findByProjectId(Integer id);

    /**
     * 修改重量
     *
     * @param task task
     */
    void updateWeight(Task task);

    /**
     * 修改包装任务主体等状态
     *
     * @param packTask packTask
     */
    void updateMainStatusByID(TaskModel packTask);

    List<Integer> findTempTaskIdByProjectId(Integer id);
}